;:sys36864
	;.opt oo
	*= $8000
tmp	=181
chk	=4
ramnr	=5
tab	=12
pos	=384
a	=2
try	=247
old	=248
puff	=$cf00
mgl	=249
	.word reset,reset
	.byte "CBM80"
reset	ldx #-1
	sei
	txs
	cld
	stx $d016
	jsr $fda3
	lda #0
	tay
clrzp	sta 2,y
	sta 512,y
	sta 768,y
	iny
	bne clrzp
	lda #4
	sta 648
	lda #8
	sta $282
	lda #128
	sta $284
	jsr $fd15
	jsr 65409
	lda #0
	sta 53280
	sta 53281
	cli
	jsr $e453
	jsr $e3bf
	ldx #$fb
	txs
	jsr tit
	jsr primm
	.byte "Kernal-ROM\x18"
	ldy #0
	sty chk
	sty tmp
	lda #224
	sta tmp+1
	ldx #32
c1	lda (tmp),y
	clc
	adc chk
	sta chk
	iny
	bne c1
	inc tmp+1
	dex
	bne c1
	lda 65408
	beq zer
	cmp #3
	bne sonst
	lda #10
	.byt $2c
zer	lda #11
	cmp chk
	jsr pass
	jmp verout
sonst	jsr fail
	jsr primm
	.byte "  ???\x9d\x03"
verout	jsr primm
	.byte "\x1d\x1dversion #\x03"
	ldx 65408
	lda #0
	jsr $bdcd
	jsr primm
	.byte "\x1aBasic-ROM\x18"
	ldy #0
	sty chk
	sty tmp
	lda #160
	sta tmp+1
	ldx #32
c2	lda (tmp),y
	clc
	adc chk
	sta chk
	iny
	bne c2
	inc tmp+1
	dex
	bne c2
	lda #86
	cmp chk
	jsr pass
	jsr primm
	.byte "\x1aFont-ROM\x18"
	sei
	lda #51
	sta 1
	ldy #0
	sty chk
	sty tmp
	lda #208
	sta tmp+1
	ldx #16
c3	lda (tmp),y
	clc
	adc chk
	sta chk
	iny
	bne c3
	inc tmp+1
	dex
	bne c3
	lda #55
	sta 1
	cli
	lda #248
	cmp chk
	jsr pass
	ldx #chips-mram
copyst	lda mram,x
	sta pos,x
	dex
	bpl copyst
	jsr $aad7
	ldx #0
ramloop	stx ramnr
	jsr primm
	.byte "\x1aRAM U\x03"
	lda chips,x
	tax
	lda #0
	jsr $bdcd
	lda #tab
	sta 211
	sei
	ldy #2
	ldx ramnr
ra1	lda 0,y
	sta chk
	lda #-1
	sta 0,y
	lda 0,y
	and grbit,x
	beq r0
	lda #0
	sta 0,y
	lda 0,y
	and grbit,x
	bne r0
	lda chk
	sta 0,y
	iny
	bne ra1
	beq bisherok
r0	lda #0
	sta tmp+1
	sty tmp
	ldy #0
	lda chk
	sta (tmp),y
ramfaul	lda tmp
	pha
	lda tmp+1
	pha
	lda #1
	jsr pass
	jsr primm
	.byte "  addr = $\x03"
	pla
	jsr hexout
	pla
	jsr hexout
	jmp ramcont
bisherok	lda #48
	sei
	jsr pos
	cli
	bcs ramfaul
	lda #0
	jsr pass
ramcont	ldx ramnr
	inx
	cpx #8
	bcs ramfert
	jmp ramloop
ramfert	=*
	jsr primm
	.byte "\x1a\x1aColor-RAM\x18"
	ldy #0
cr1	=*
	lda $d800,y
	sta chk
	lda #10
	sta $d800,y
	lda $d800,y
	and #15
	cmp #10
	bne qcfaul
	lda #5
	sta $d800,y
	lda $d800,y
	and #15
	cmp #5
	bne qcfaul
	lda chk
	sta $d800,y
	lda $d900,y
	sta chk
	lda #10
	sta $d900,y
	lda $d900,y
	and #15
	cmp #10
qcfaul	bne cfaul
	lda #5
	sta $d900,y
	lda $d900,y
	and #15
	cmp #5
	bne cfaul
	lda chk
	sta $d900,y
	lda $da00,y
	sta chk
	lda #10
	sta $da00,y
	lda $da00,y
	and #15
	cmp #10
	bne cfaul
	lda #5
	sta $da00,y
	lda $da00,y
	and #15
	cmp #5
	bne cfaul
	lda chk
	sta $da00,y
	lda $db00,y
	sta chk
	lda #10
	sta $db00,y
	lda $db00,y
	and #15
	cmp #10
	bne cfaul
	lda #5
	sta $db00,y
	lda $db00,y
	and #15
	cmp #5
	bne cfaul
	lda chk
	sta $db00,y
	iny
	beq cok
	jmp cr1
cok	lda #0
cfaul	jsr pass
	jsr primm
	.byte "\x1a\x1aALU\x18"
	lda #123
	clc
	adc #45
	sbc #89
	ora #16
	and #$bc
	eor #$78
	lsr
	sec
	ror
	eor #$99
	bne alu0
	sec
	rol
	sbc #36
	asl
	adc #78
	sed
	clc
	adc #$50
	cld
	eor #$57
alu0	jsr pass
	jsr primm
	.byte "\x1aJMP ($xxff)\x18"
	lda #169
	sta $cf10
	sta $cf11
	lda #96
	sta $cf12
	sta $ce10
	lda #$10
	sta $ceff
	ldx #$cf
	stx $cf00
	dex
	stx $ce00
	jsr test6510
	cmp #169
	jsr pass
	jsr primm
	.byte "\x1aStack\x18"
	tsx
	stx chk
fillstack	lda reset,x
	pha
	dex
	bne fillstack
holstack	inx
	pla
	cmp reset,x
	bne stack0
	cpx chk
	bcc holstack
	lda #0
	.byt 44
stack0	lda #1
	ldx chk
	txs
	tax
	jsr pass
	jsr cont
	jsr tit
	jmp schnitt
sound	jsr primm
	.byte "\x1a\x1aSID env\x18"
	lda #20
	sta try
nexttry	jsr clrsid
	lda #15
	sta 54296
	lda #$fa
	sta 54292
	jsr count1
	lda #17
	sta 54290
	lda #16
	sta 54290
wartan	jsr pause
	lda 49300
	beq wartan
wartaus	lda 54300
	bne wartaus
	jsr count0
	lda a+1
	bne ih
	lda a
	cmp #83
	beq passt
ih	dec try
	bne nexttry
	lda #255
passt	jsr pass
	jsr primm
	.byte "\x1aSID osc\x18"
	lda #20
	sta mgl
moegl	sei
	lda #220
	ldy #65
	jsr getsid
	bne du1
fa1	lda puff,x
	beq fa2
	cmp #-1
	bne du1
fa2	inx
	bne fa1
	txa
du1	sta chk
	lda #1
	ldy #33
	jsr getsid
	bne du2
	lda puff
fb	cmp puff,x
	bne du2a
	clc
	adc #1
	inx
	bne fb
	txa
	beq du2
du2a	lda #-1
du2	ora chk
	sta chk
	lda #1
	ldy #17
	jsr getsid
	bne du3
	inx
fc1	lda puff-1,x
	sec
	sbc puff,x
	cmp #3
	bcc fc2
	cmp #-2
	bcc du3
fc2	inx
	bne fc1
	txa
du3	ora chk
	beq rausda
	dec mgl
	bne moegl
	lda #-1
rausda	cli
	jsr pass
	jmp clrsid
schnitt	jsr primm
	.byte "A/D conv.\x18"
wartfrei	lda 203
	cmp #64
	bne wartfrei
	lda #-1
	cmp 54297
	bne ad0
	cmp 54298
ad0	jsr pass
	jsr primm
	.byte "\x1aCTRL ports\x18"
	lda #127
	cmp 56320
	bne ct0
	lda #-1
	cmp 56321
	bne ct0
	ldx #0
	stx 56322
	cmp 56320
ct0	jsr pass
	lda #-1
	sta 56322
	jsr primm
	.byte "\x1aUserport\x18"
	lda #0
	sta 56579
	ldx #255
	cpx 56577
	bne up0
	sta 56577
	cpx 56577
	bne up0
	lda #151
	cmp 56576
	bne up0
	stx 56576
	lda 56576
	cmp #63
up0	jsr pass
	lda #151
	sta 56576
	jsr sound
	jsr primm
	.byte "\x1a\x1at/Raster\x18"
	ldx #0
	sei
	lda #20
	sta try
wartr1	lda 53265
	bmi wartr1
wartr3	lda 53266
	cmp #101
	bne wartr3
wartr2	inx
	cmp 53266
	beq wartr2
	cpx #7
	beq rasok
	cpx #6
	bcc ras0
	cpx #9
	bcs ras0
	ldx #0
	dec try
	bne wartr1
ras0	lda #-1
	stx 1024
rasok	cli
	jsr pass
	jsr primm
	.byte "\x1aSprites\x18"
	lda #255
	ldx #63
ve1	sta 704,x
	dex
	bpl ve1
	lda #7
	sta 53269
	lda #100
	ldx #200
	sta 53248
	stx 53249
	lda #120
	ldx #205
	sta 53250
	stx 53251
	lda #150
	ldx #210
	sta 53252
	stx 53253
	lda #1
	sta 53288
	sta 53289
	lda #11
	sta 2040
	sta 2041
	sta 2042
	ldx #7
ve2	stx 53277
	lda 53278
	txa
	pha
	jsr pause2
	pla
	tax
	lda 53278
	cmp ziel,x
	bne ve3
	dex
	bpl ve2
	lda 53279
	jsr pause2
	lda 53279
	bne ve3
	lda #43
	sta 1881
	lda 53279
	jsr pause2
	lda 53279
	cmp #4
ve3	jsr pass
	lda #0
	sta 53269
	lda #32
	sta 1881
	jsr primm
	.byte "\x1aRaster-IRQ\x18"
	lda #20
	sta try
rs2	sei
	lda #100
	sta $d012
	lda #27
	sta 53265
	lda #$81
	sta $d01a
	ldx #0
	stx chk
	ldy #0
	lda #<rirq
	ldy #>rirq
	sta 788
	sty 789
	cli
wartras	inx
	bne rs3
	iny
	beq rs4
rs3	lda chk
	beq wartras
	sei
	lda #0
	sta $d01a
	jsr count0
	lda chk
	cmp #100
	beq rs1
	dec try
	bne rs2
rs4	lda #-1
rs1	jsr pass
	jsr nmi
	jsr primm
	.byte "\x1aTimer-IRQ\x18"
	lda #3
	sta try
iq2	ldx #0
	jsr count1
	txa
	tay
iq1	inx
	bne iq1
	iny
	bne iq1
	clc
	adc #1
	cmp #11
	bcc iq1
	jsr count0
	lda a+1
	bne iq3
	lda a
	cmp #234
	beq iq4
iq3	dec try
	bne iq2
	lda #-1
iq4	jsr pass
	jsr primm
	.byte "\x1aTimer CIA1\x18"
	lda #-1
	sta $dc04
	sta $dc06
	lda #200
	sta $dc05
	sta $dc07
	lda #%10011000
	sta $dc0e
	and #$ef
	sta $dc0e
	lda #%00011000
	sta $dc0f
	and #$ef
	sta $dc0f
	lda $dc04
	cmp #-1
	bne oh1
	cmp $dc06
	bne oh1
	lda $dc05
	cmp #200
	bne oh1
	cmp $dc07
	bne oh1
	sei
	lda #9
	sta $dc0e
	sta $dc0f
warttm1	lda $dc05
	bne warttm1
	cmp $dc07
oh1	jsr pass
	jsr $ff84
	jsr primm
	.byte "\x1aTimer CIA2\x18"
	lda #-1
	sta $dd04
	sta $dd06
	lda #200
	sta $dd05
	sta $dd07
	lda #%10011000
	sta $dd0e
	and #$ef
	sta $dd0e
	lda #%00011000
	sta $dd0f
	and #$ef
	sta $dd0f
	lda $dd04
	cmp #-1
	bne oh2
	cmp $dd06
	bne oh2
	lda $dd05
	cmp #200
	bne oh2
	cmp $dd07
	bne oh2
	sei
	lda #9
	sta $dd0e
	sta $dd0f
warttm2	lda $dd05
	bne warttm2
	cmp $dd07
oh2	jsr pass
	jsr primm
	.byte "\x1aTOD CIA1\x18"
	lda #3
	sta try
wt02	lda #<9850
	sta $dd04
	lda #>9850
	sta $dd05
	lda #-1
	sta $dd06
	sta $dd07
	lda #16
	sta $dd0e
	sta $dd0f
	lda #%01001001
	sta $dd0f
	lda #0
	sta $dc0b
	sta $dc0a
	sta $dc09
	sei
	ldy #0
	ldx #%10000001
	stx $dd0e
	sta $dc08
	lda #129
	sta $dc0e
wt01	lda $dc09
	cmp #$10
	bne wt01
	sty $dd0f
	sty $dd0e
	lda $dd06
	cmp #24
	beq wt05
	cmp #23
	bne wt03
wt05	lda $dd07
	cmp #252
	beq wt04
wt03	dec try
	bne wt02
	lda #-1
wt04	jsr pass
	jsr primm
	.byte "\x1aTOD CIA2\x18"
	lda #3
	sta try
wt12	lda #<9850
	sta $dd04
	lda #>9850
	sta $dd05
	lda #-1
	sta $dd06
	sta $dd07
	lda #16
	sta $dd0e
	sta $dd0f
	lda #%01001001
	sta $dd0f
	lda #0
	sta $dd0b
	sta $dd0a
	sta $dd09
	sei
	ldy #0
	ldx #%10000001
	stx $dd0e
	sta $dd08
wt11	lda $dd09
	cmp #$10
	bne wt11
	sty $dd0f
	sty $dd0e
	lda $dd06
	cmp #24
	beq wt15
	cmp #23
	bne wt13
wt15	lda $dd07
	cmp #252
	beq wt14
wt13	dec try
	bne wt12
	lda #-1
wt14	jsr pass
	jmp maz
nmi	jsr primm
	.byte "\x1a\x1aTimer-NMI\x18"
	lda #3
	sta try
w15	lda #-1
	sta $dd04
	sta $dd05
	lda #144
	sta $dd0e
	ldx #129
	jsr nmi1
	lda #137
	sta $dd0e
	ldx #0
	stx chk
	ldy #0
w11	inx
	bne w12
	iny
	beq w13
w12	lda chk
	beq w11
	cpy #21
w14	beq w16
w13	dec try
	bne w15
	lda #-1
w16	jsr pass
	jsr nmi0
	jsr primm
	.byte "\x1aTOD-NMI\x18"
	lda #3
	sta try
w25	lda #128
	sta $dd0f
	sta $dd0e
	lda #0
	sta $dd0b
	sta $dd0a
	ldx #2
	stx $dd09
	sta $dd08
	sta $dd0f
	ldx #$84
	jsr nmi1
	lda #0
	sta $dd0b
	sta $dd0a
	sta $dd09
	sta $dd08
	tax
	stx chk
	tay
	lda #3
	sta mgl
w21	inx
	bne w22
	iny
	bne w22
	dec mgl
	beq w23
w22	lda chk
	beq w21
	ldy mgl
	cpy #1
w24	beq w26
w23	dec try
	bne w25
	lda #-1
w26	jsr pass
	jmp nmi0
maz	=*
	jsr cont
	jmp reset
cont	jsr primm
	.byte "\x1a\x1aAny key to continue\x03"
	lda #0
	sta 198
wait2	cmp 198
	beq wait2
	rts
tit	jsr primm
	.byte "\x1a\x93\x08\x05\x0eDoc'64 2.1  by N. Heusler  nh-071090-arr\x1a\x03"
	rts
primm	pla
	sta tmp
	pla
	sta tmp+1
p1	inc tmp
	bne p2
	inc tmp+1
p2	ldy #0
	lda (tmp),y
	beq p3
	cmp #"\x03"
	beq p3
	cmp #"\x1a"
	bne p4
	lda #13
p4	cmp #"\x18"
	beq p5
	jsr $ffd2
	bcc p1
p5	lda #tab
	sta 211
p3	lda tmp+1
	pha
	lda tmp
	pha
	rts
pass	bne fail
	jsr primm
	.byte "\x1epassed\x05\x03"
	rts
fail	jsr primm
	.byte "\x1cFAILED\x05\x03"
	rts
hexout	pha
	lsr
	lsr
	lsr
	lsr
	jsr hex1
	pla
hex1	and #15
	tax
	lda hex,x
	jmp 65490
test6510	jmp ($ceff)
mram	sta 1
	lda #2
	sta tmp+1
	ldy #0
	sty tmp
r1	lda (tmp),y
	pha
	lda #-1
	sta (tmp),y
	lda (tmp),y
	and grbit-mram+pos,x
	beq r2
	lda #0
	sta (tmp),y
	lda (tmp),y
	and grbit-mram+pos,x
	bne r2
	pla
	sta (tmp),y
	inc tmp
	bne r1
	inc tmp+1
	bne r1
	lda #55
	sta 1
	clc
	rts
r2	pla
	sta (tmp),y
	lda #55
	sta 1
	sec
	rts
grbit	.byt 1,2,4,8,16,32,64,128
chips	.byt 21,9,22,10,23,11,24,12
hex	.byte "0123456789abcdef"
ziel	.byt 3,3,7,7,3,3,7,7
countirq	inc a
	bne a1
	inc a+1
a1	jmp $ea7e
count1	sei
	lda #0
	sta a
	sta a+1
	lda #<countirq
	ldy #>countirq
setirq	sta 788
	sty 789
	cli
	rts
count0	sei
	lda #$31
	ldy #$ea
	bne setirq
nmi1	lda #<nmi9
	ldy #>nmi9
nmis	sta 792
	sty 793
	stx $dd0d
	rts
nmi0	lda #71
	ldy #254
	ldx #127
	bne nmis
nmi9	pha
	txa
	pha
	tya
	pha
	lda $dd0d
	and #%101
	bne nmi8
nmi7	jmp $febc
nmi8	lda #-1
	sta chk
	bne nmi7
clrsid	ldx #0
	txa
csid	sta 54272,x
	dex
	bne csid
	rts
pause2	jsr pause
pause	ldx #10
pa1	jsr $eeb3
	dex
	bne pa1
	rts
getsid	pha
	jsr clrsid
	lda #15
	sta 54296
	pla
	sta 54287
	lda #8
	sta 54289
	sty old
	ldx #0
	stx try
	sty 54290
liessid	dec try
	beq ratte
	lda 54299
	cmp old
	beq liessid
	sta puff,x
	sta old
	lda #0
	sta try
	inx
	bne liessid
	dey
	sty 54290
	txa
	rts
ratte	tya
	rts
rirq	lda $d019
	sta $d019
	lsr
	bcs ract
	jmp $ea31
ract	lda $d012
	sta chk
	jmp $ea81
	.byte "  doc 64  version 2.1"
	.byte "  autor: nikolaus heusler   zweng"
	.byte "auerweg 18   8000 muenchen 71    (c) nh90"
